(function($){
    $.fn.filePlugin = function(parameters){
        var thatId = this.selector; //当前元素的id
        var that = this; //当前input元素
        var thatName = that[0].name;
        if(parameters == null){
            fileType = '';
            multiply = true;
            fileNumber = 300;
            size = 1000;
        }else{
            size = parameters.size;
            fileNumber =parameters.fileNumber;
            multiply = parameters.multiply;
            fileType = parameters.type ;//文件类型
        }
        var extensions = ''; //文件后缀名
        var mimeTypes = ''; //支持的文件后缀名
        var typeTitle = '';//文件类型名字
        switch (fileType) { //验证文件类型
            case "image":
                extensions = 'jpg,jpeg,png';
                mimeTypes = 'image/jpg,image/jpeg,image/png';
                typeTitle = '选择图片';
                break;
            case "audio":
                extensions = 'mp2,mp3,mp4,3gpp,ac3,au';
                mimeTypes = 'audio/mpeg,audio/mp4,audio/3gpp,audio/ac3,audio/basic';
                typeTitle = '选择音频';
                break;
            case "video":
                extensions = 'mpeg,mpg,mp4,3gpp';
                mimeTypes = 'video/mpeg,video/mp4,video/3gpp';
                typeTitle = '选择视频';
                break;
            case "readFile":
                extensions = 'doc,docx,dot,dtd,pdf,html,htm,txt,wps';
                mimeTypes = 'application/msword,application/xml-dtd,application/pdf,text/html,text/plain,application/vnd.ms-works';
                typeTitle = '选择文件';
                break;
            case "zipFile":
                extensions = 'zip,rar';
                mimeTypes = 'aplication/zip';
                typeTitle = '选择压缩文件';
                break;
            default:
                extensions = '';
                mimeTypes = '';
                typeTitle = '选择文件';
        }
        // console.log(parameters.size);
        //追加添加图片元素
        that.after('<div >\n' +
            '<div id="'+thatName+'FileList" class="uploader-list"></div>\n' +
            '<div id="'+thatName+'FilePicker">'+typeTitle+'</div>\n' +
            '</div>')
        var $list = $('#'+thatName+'FileList'); //图片缩略图div
        // 优化retina, 在retina下这个值是2
        var ratio = window.devicePixelRatio || 1;
        // 缩略图大小
        var thumbnailWidth = 100 * ratio;
        var thumbnailHeight = 100 * ratio;

        // 初始化Web Uploader
        var uploader = WebUploader.create({
            // 自动上传。
            auto : true,
            // swf文件路径
            swf : '<%=request.getContextPath()%>/static/plugin/webuploader-0.1.5/Uploader.swf',
            // 文件接收服务端。
            server : COMMON_URL.uploadImage,
            // 选择文件的按钮。可选。
            // 内部根据当前运行是创建，可能是input元素，也可能是flash.
            // pick : '#mainImageUrlFilePicker',
            pick : {
                id:'#'+thatName+'FilePicker',
                multiple: multiply //只能选择一个文件上传
            },
            // 只允许选择文件，可选。
            accept : {
                title : fileType,
                extensions : extensions,
                mimeTypes : mimeTypes
            },
            duplicate : true,
            fileNumLimit:fileNumber, //验证文件总数量, 超出则不允许加入队列。
            //验证文件总大小是否超出限制, 超出则不允许加入队列
            // fileSizeLimit: 200 * 1024 * 1024,    // 200 M
            //验证单个文件大小是否超出限制, 超出则不允许加入队列
            // fileSingleSizeLimit: 50 * 1024 * 1024    // 50 M
            // fileSingleSizeLimit: parameters.size.z * parameters.size.widthHeight   // 50 M
            fileSingleSizeLimit: size * 1024 * 1024  //  M
        });
        //图片回显
        //获取input框里的url地址
        var imgUrl = that.val();
        // console.log(imgUrl);
        //将url地址分割成数组
        var imgUrlArr=imgUrl.split(/,/);
        //遍历url地址填充到img里,并将每个li添加到ul里
        for(i=0; i < imgUrlArr.length; i++){
            if(imgUrl != ''){
                $list.append('<div class="fileBackground">'+'<img src='+imgUrlArr[i]+'>'+
                    '<div class="closeImg" file='+imgUrlArr[i]+' pageId='+thatId+'></div>'+
                    '</div>');
            }
            //回显图片显示相应背景图片
            if(fileType =='image'){
                //获取图片宽度，图片高度=宽度
                var $divWidth = $('.fileBackground>img').width();
                $('.fileBackground>img').css({'height':$divWidth});
            }else if(fileType == ''){
                if(/.*(.jpg|.png|.gif|.jpeg)$/.test(imgUrlArr[i])){
                    var $divWidth = $('.fileBackground>img').width();
                    $('.fileBackground>img').css({'height':$divWidth});
                }else if(/.*(.mp2|.mp3|.mp4|.3gpp|.ac3|.au)$/.test(imgUrlArr[i])){
                    $('.fileBackground>img').css({'display':'none'});
                    $('.fileBackground').addClass('audioImg');
                }else if(/.*(.mpeg|.mpg|.mp4|.3gpp)$/.test(imgUrlArr[i])){
                    $('.fileBackground>img').css({'display':'none'});
                    $('.fileBackground').addClass('videoImg');
                }else if(/.*(.doc|.docx|.dot|.dtd|.pdf|.html|.htm|.txt|.wps)$/.test(imgUrlArr[i])){
                    $('.fileBackground>img').css({'display':'none'});
                    $('.fileBackground').addClass('readFile');
                }else if(/.*(.zip|.rar)$/.test(imgUrlArr[i])){
                    $('.fileBackground>img').css({'display':'none'});
                    $('.fileBackground').addClass('zipFile');
                }else{
                    $('.fileBackground>img').css({'display':'none'});
                    $('.fileBackground').addClass('fileImg');
                }

            }else{
                // $('.fileBackground>img').hidden();
                //非图片类型，背景图片加载
                switch (fileType) { //验证文件类型,如果不是图片类型，添加对应背景图
                    case "audio":
                        $('.fileBackground').addClass('audioImg');
                        break;
                    case "video":
                        $('.fileBackground').addClass('videoImg');
                        break;
                    case "readFile":
                        $('.fileBackground').addClass('readFile');
                        break;
                    case "zipFile":
                        $('.fileBackground').addClass('zipFile');
                        break;
                    //case '':
                        // if( $('.fileBackground>img').is(":hidden")){
                        //     $('.fileBackground>img').show();
                        //     var $divWidth = $('.fileBackground>img').width();
                        //     $('.fileBackground>img').css({'height':$divWidth});
                        // }else{
                        // $('.fileBackground>img').attr({'src':''});
                        // $('.fileBackground').addClass('fileImg');
                        // }
                        //break;
                }
            }
        }


        //点击回显图片删除按钮时，删除缩略图并对应删除input里的value值
        $('.closeImg').click(function(){
            var $this=$(this);
            var file = $this.attr('file') //url地址
            var pageId = $this.attr('pageId') //当前元素的id
            $this.parent().remove();
            var value = $(pageId).val();
            if(value.indexOf(",")>0){
                //判断是否为第一个，如果是第一个，则后面加“,”;如果不是，则前面加“，”
                var dis = file;
                var teeee = value.substring(0,dis.length);
                if(teeee==dis){
                    var temp = value.replace(dis+",","");
                    $(pageId).val(temp);
                }else{
                    var temp = value.replace(","+dis,"");
                    $(pageId).val(temp);
                }
            }else{
                var dis = file ;

                var temp = value.replace(dis,"");

                $(pageId).val(temp);
            }
        })

        //验证文件格式以及文件大小
        uploader.on("error", function (type) {
            // console.log(type);
            if(type == 'Q_EXCEED_NUM_LIMIT'){
                alert('文件上传不能超过'+parameters.fileNumber+'个')
            } else if (type == "F_EXCEED_SIZE"){
                alert("文件大小不能超过"+parameters.size+"M");
            }else {
                alert("上传出错！请检查文件类型！");
            }
        });

        // 当有文件添加进来的时候
        uploader.on('fileQueued', function(file) {
            var $li = $('<div id="' + file.id + '" class="file-item thumbnail"><img><div class="info">' + file.name + '</div></div>');
            var $img = $li.find('img');
            $list.append($li);
            // 创建缩略图
            uploader.makeThumb(file, function(error, src) {
                // console.log(error);
                // console.log(file);
                // console.log(fileType);
                if (error) {
                    // console.log(file.name);
                    // console.log(fileType);
                    // $img.replaceWith('<span>不能预览</span>');
                 if(fileType == ''){
                        if(/.*(.jpg|.png|.gif|.jpeg)$/.test(file.name)){
                            var $divWidth = $('.file-item>img').width();
                            $('.file-item>img').css({'height':$divWidth});
                        }else if(/.*(.mp2|.mp3|.mp4|.3gpp|.ac3|.au)$/.test(file.name)){
                            $('.file-item>img').css({'display':'none'});
                            $('.file-item').addClass('audioImg');
                        }else if(/.*(.mpeg|.mpg|.mp4|.3gpp)$/.test(file.name)){
                            $('.file-item>img').css({'display':'none'});
                            $('.file-item').addClass('videoImg');
                        }else if(/.*(.doc|.docx|.dot|.dtd|.pdf|.html|.htm|.txt|.wps)$/.test(file.name)){
                            $('.file-item>img').css({'display':'none'});
                            $('.file-item').addClass('readFile');
                        }else if(/.*(.zip|.rar)$/.test(file.name)){
                            $('.file-item>img').css({'display':'none'});
                            $('.file-item').addClass('zipFile');
                        }else{
                            $('.file-item>img').css({'display':'none'});
                            $('.file-item').addClass('fileImg');
                        }
                }else{
                        switch (fileType) { //验证文件类型,如果不是图片类型，添加对应背景图
                            case "audio":
                                $('.file-item').addClass('audioImg');
                                break;
                            case "video":
                                $('.file-item').addClass('videoImg');
                                break;
                            case "readFile":
                                $('.file-item').addClass('readFile');
                                break;
                            case "zipFile":
                                $('.file-item').addClass('zipFile');
                                break;
                            default:
                                $('.file-item').addClass('fileImg');
                        }
                    }
                    // return;
                }
                $img.attr('src', src);
            }, thumbnailWidth, thumbnailHeight);
        });

        // 文件上传过程中创建进度条实时显示。
        uploader.on('uploadProgress', function(file, percentage) {
            var $li = $('#' + file.id);
            var $percent = $li.find('.progress span');
            // 避免重复创建
            if (!$percent.length) {
                $percent = $('<p class="progress"><span></span></p>').appendTo($li).find('span');
            }
            $percent.css('width', percentage * 100 + '%');
        });

        // 文件上传成功，给item添加成功class, 用样式标记上传成功。
        uploader.on('uploadSuccess', function(file, response) {
            //alert( COMMON_URL.getImage + response.fileName );
            // console.log(file);
            // var bannerUrls = $(fileId).val();
            var bannerUrls = that.val();
            // console.log(bannerUrls);
            if(bannerUrls){
                bannerUrls += "," + response.data.url;
            }else{
                bannerUrls += response.data.url;
            }

            //bannerUrls += "," + COMMON_URL.getImage + response.fileName;

            //把图片url地址填充到input里
            // $(fileId).val(bannerUrls);
            that.val(bannerUrls);
            // alert(bannerUrls);
            $('#' + file.id).addClass('upload-state-done');
            // $('#' + file.id).append('<div class="del" onclick="del(this,\''+ response.data.url +'\',\''+ thatId +'\')"></div>');
            $('#' + file.id).append('<div class="del" file='+response.data.url+' pageId='+thatId+'></div>');
            //点击删除按钮，删除缩略图和对应input里的url地址
            $('.del').click(function(){
                var $this=$(this);
                var file = $this.attr('file') //当前元素的url地址
                var pageId = $this.attr('pageId') //当前元素的id
                $this.parent().remove();
                var value = $(pageId).val(); //input的value值
                if(value.indexOf(",")>0){
                    //判断是否为第一个，如果是第一个，则后面加“,”;如果不是，则前面加“，”
                    var dis = file;
                    var teeee = value.substring(0,dis.length);
                    if(teeee==dis){
                        var temp = value.replace(dis+",","");
                        $(pageId).val(temp);
                    }else{
                        var temp = value.replace(","+dis,"");
                        $(pageId).val(temp);
                    }
                }else{
                    var dis = file ;

                    var temp = value.replace(dis,"");

                    $(pageId).val(temp);
                }
            })

        });
        // 文件上传失败，现实上传出错。
        uploader.on('uploadError', function(file) {
            var $li = $('#' + file.id);
            var $error = $li.find('div.error');
            // 避免重复创建
            if (!$error.length) {
                $error = $('<div class="error"></div>').appendTo($li);
            }
            $error.text('上传失败');
        });

        // 完成上传完了，成功或者失败，先删除进度条。
        uploader.on('uploadComplete', function(file) {
            $('#' + file.id).find('.progress').remove();
        });


    }

})(jQuery)



